/*
 * Metodos para la Alta, baja y Modificacion de Clientes
 * 
 */
package clases;
//Importamos las clases necesarias para generar el ABM
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author Pablo Javier Heurtley
 * @web http://www.hcomputacion.com
 * @version alpha 00.00.01
 */
public class ABMClientes 
{
    /**
     * En cambio de usar un Statement usamos un PreparedStatement para asi conseguir un mejor uso de los recursos
     * y ademas en caso de haber un error obtener mayor cantidad de informacion y asi poder generar una solucion.
     */
    PreparedStatement pstmt;
    ResultSet rs;
    // Con MetaData obtenemos informacion sobre las columnas de la tabla en la base de datos. Muy util para llenar un jtable.
    ResultSetMetaData metaData;
    //Declaramos el Objeto "conexion"
    ConexionMySQL conexion = new ConexionMySQL();
    //Por el momento no quiero que devuelva nada el metodo agregar, pero en futuras modificaciones posiblemente si.
    public void agregar(String nombre,String apellido,String direccion,String telefono,String celular,String dni,String obrasocial,String profesion,java.util.Date fnacimiento,java.util.Date finscripcion,java.util.Date cmedico,String sexo,String email,String web,String facebook,String twitter,String detalles,String activo, String status, File foto)
    {
        FileInputStream fis = null;
        try {
            //Aqui va el codigo del metodo agregar()
            //Para pasar la fecha a formato String y asi poder enviarla a la base de datos.
            SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat movimiento = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
            //Preparamos la query
            pstmt = conexion.conexion.prepareStatement("INSERT INTO "+Config.Clientes+" (nombre, apellido, direccion, telefono, celular, dni, obrasocial, profesion, nacimiento, inscripcion, cmedico, sexo, email, web, facebook, twitter, detalles, activo, status, imagen) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            pstmt.setString(1, nombre);
            pstmt.setString(2, apellido);
            pstmt.setString(3, direccion);
            pstmt.setString(4, telefono);
            pstmt.setString(5, celular);
            pstmt.setString(6, dni);
            pstmt.setString(7, obrasocial);
            pstmt.setString(8, profesion);
            pstmt.setString(9, formato.format(fnacimiento));
            pstmt.setString(10, movimiento.format(finscripcion));
            pstmt.setString(11, formato.format(cmedico));
            pstmt.setString(12, sexo);
            pstmt.setString(13, email);
            pstmt.setString(14, web);
            pstmt.setString(15, facebook);
            pstmt.setString(16, twitter);
            pstmt.setString(17, detalles);
            pstmt.setString(18, activo);
            pstmt.setString(19, status);
            fis = new FileInputStream(foto);
            pstmt.setBinaryStream(20, fis, (int) foto.length());
            
            if (pstmt.execute() == false )
            {
                System.out.println("Query ejecutada con exito");
            }
            else
            {
                System.out.println("Hubo un problema al ejecutar la query");
            }
            
        } catch (FileNotFoundException ex) { 
            Logger.getLogger(ABMClientes.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (SQLException ex) 
        {
            //Codigo autogenerado por NetBeans, posiblemente sea mejor armar algo mas personalizado e imprimir errores mas puntuales.
            Logger.getLogger(ABMClientes.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(ABMClientes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
    }
    public void borrar(String ID)
    {
        try 
        {
            pstmt = conexion.conexion.prepareStatement("UPDATE "+Config.Clientes+" SET activo=? , status=? WHERE id='"+ID+"'");
            pstmt.setString(1, "I");
            pstmt.setString(2, "E");
            pstmt.executeUpdate();
        } 
        catch (SQLException ex) 
        {
            Logger.getLogger(ABMClientes.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public void modificar()
    {
        
    }
    public void buscar()
    {
        
    }
}